<?php

/**
 * account actions.
 *
 * @package    aceptor
 * @subpackage account
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class accountActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request)
  {
  
  }

  public function executeAsociateAccount(sfWebRequest $request){

      $session = $this->getUser()->getAttribute('session_asociate_account', null);
      $profile = $this->getUser()->getAttribute('s_pk_practil_associate_account',null);

      if($session!=null){
           $email    = $request->getParameter('userAccount');
           $token   = $request->getParameter('tokeAccount');
            
         if(md5($email)==$token && $session ==md5($email)){

              $lib = new myLib();
              $user = $lib->getDataUser($profile);              
              $this->email = $email;
              $this->token = $token;
              $this->name  = $user[0]->{'name'}.' '.$user[0]->{'lastName'};   
              $this->getUser()->setAttribute('session_asociate_account', $token.md5('aceptor'));
              return sfView::SUCCESS;

         }else{
             $this->getUser()->getAttributeHolder()->remove('s_pk_practil_associate_account');
             $this->getUser()->getAttributeHolder()->remove('session_asociate_account');
             return sfView::ERROR;
         }
      }else{
          $this->getUser()->getAttributeHolder()->remove('s_pk_practil_associate_account');
          $this->getUser()->getAttributeHolder()->remove('session_asociate_account');
          return sfView::ERROR;
      }
        
  }



  public function executeAsociate_account(sfWebRequest $request){

    $token       = $request->getParameter('token-account');
    $email       = $request->getParameter('email-account');

    $pk_practil       = $this->getUser()->getAttribute('s_pk_practil_associate_account',null);
    $sessionToken     = $this->getUser()->getAttribute('session_asociate_account', null);

    
    if($sessionToken ==$token.md5('aceptor')){
       if($pk_practil!=null && $pk_practil!="" ){
           $lib = new myLib();
           $url= $lib->url_practil_associate_account($email);
           $respuesta_servicio = file_get_contents($url);
           $decode = json_decode($respuesta_servicio);
               if($decode->{'success'}){

                      $user = $lib->getDataUser($pk_practil);

                      $obj = json_decode(
                              $this->execute_registrar_usuario_aceptor(
                                      $user[0]->{'name'},
                                      $user[0]->{'lastName'},
                                      $user[0]->{'lastName'},
                                      $email,
                                      '',
                                      2)
                              );
                         if($obj->{'code'}==10001){
                                $criteria = new Criteria();
                                $criteria->add(TbUsuarioPeer::CORREO,'%'.$email.'%',Criteria::LIKE);
                                $user_correo = TbUsuarioPeer::doSelectOne($criteria);
                                $user_correo->setIdPractil($pk_practil);
                                $user_correo->save();
                                $this->getUser()->setAuthenticated(true);
                                $this->redirect('home/index');
                         }else{
                             return sfView::ERROR;
                         }
                         
               }else{
                    $this->getUser()->setAttribute('s_pk_practil_associate_account',null);
                    return sfView::ERROR;
               }

       }else{
        $this->getUser()->setAttribute('s_pk_practil_associate_account',null);
        return sfView::ERROR;
       }
    }else{
       $this->getUser()->setAttribute('s_pk_practil_associate_account',null);
       return sfView::ERROR;
    }
}



public function execute_registrar_usuario_aceptor($nombre,
                                                  $apellido_paterno,
                                                  $apellido_materno,
                                                  $correo,
                                                  $password,$verificacion){
        try {


              {
                $obj_usuario = new TbUsuario();
                $obj_usuario->setNombre($nombre);
                $obj_usuario->setApePaterno($apellido_paterno);
                $obj_usuario->setApeMaterno($apellido_materno);
                $obj_usuario->setCorreo($correo);
                $obj_usuario->setPassword($password);
                $obj_usuario->setFechaRegistro(date('Y-m-j'));
                $obj_usuario->setHoraRegistro(date('g:i:s'));
                $obj_usuario->setFechaHoraRegistro(date('Y-m-d H:i:s'));
                 /*23 junio 2011
                Se asigna el estado 1 (que todavia no se que significa)  */
                $obj_usuario->setEstado('1');
                $obj_usuario->save();
                //Obtiene el Id del nuevo usuario
                $usuario_id =  $obj_usuario->getId();
              }


              {   ////Registra 1 Etiqueta por default al nuevo usuario

                        $one_detalle_etiqueta_user = new TbDetalleUsuarioCategoria();
                        $one_detalle_etiqueta_user->setUsuarioId($usuario_id);
                        $one_detalle_etiqueta_user->setNombreCategoria('todos');
                        $one_detalle_etiqueta_user->save();

              }

              {
                 /* Asigna los acuerdos pendientes a los usuarios */
                /*23 junio 2011
                    cuando un usuario es registrado se busca en la tabla
                       - TbDetalleAcuerdoContactoPeer
                       - TbDetalleActaContactoPeer
                    si hay algun acuerdo o algun Acta con su correo y
                    le asigno el id del usuario creado a esa tabla
                 */
                $tiene_actas_acuerdo = 1;

                $criteria = new Criteria();
                $criteria->add(TbDetalleAcuerdoContactoPeer::CORREO,$correo);
                $criteria->add(TbAcuerdoPeer::ESTADO,'1');
                $criteria->addJoin(TbDetalleAcuerdoContactoPeer::ACUERDO_ID,  TbAcuerdoPeer::ID);
                $lst_acuerdo_contacto = TbDetalleAcuerdoContactoPeer::doSelect($criteria);

                foreach ($lst_acuerdo_contacto as $row){

                        $tiene_actas_acuerdo = 2;
                        $upd_detalle_acuerdo_contact = TbDetalleAcuerdoContactoPeer::retrieveByPK($row->getId());
                        $upd_detalle_acuerdo_contact->setUsuarioId($usuario_id);
                        $upd_detalle_acuerdo_contact->setNombre($nombre.' '.$apellido_paterno);
                        $upd_detalle_acuerdo_contact->save();

                        $detalle_acuerdo_etiqueta = new TbDetalleAcuerdoCategoria();
                        $detalle_acuerdo_etiqueta->setAcuerdoId($upd_detalle_acuerdo_contact->getAcuerdoId());
                        $detalle_acuerdo_etiqueta->setCategoriaId($one_detalle_etiqueta_user->getId());
                        $detalle_acuerdo_etiqueta->save();

                }

                 /* Asigna las actas pendientes a los usuarios recien registrados  */

                $criteria = new Criteria();
                $criteria->add(TbDetalleActaContactoPeer::CORREO,$correo);
                $criteria->add(TbActaPeer::ESTADO,'1');
                $criteria->addJoin(TbDetalleActaContactoPeer::ACTA_ID,  TbActaPeer::ID);
                $lst_acta_contacto = TbDetalleActaContactoPeer::doSelect($criteria);

                foreach ($lst_acta_contacto as $row2) {
                        $tiene_actas_acuerdo = 2;
                        $upd_detalle_acta_contact = TbDetalleActaContactoPeer::retrieveByPK($row2->getId());
                        $upd_detalle_acta_contact->setUsuarioId($usuario_id);
                        $upd_detalle_acta_contact->save();

                        $detalle_acta_etiqueta = new TbDetalleActaEtiqueta();
                        $detalle_acta_etiqueta->setActaId($upd_detalle_acta_contact->getActaId());
                        $detalle_acta_etiqueta->setCategoriaId($one_detalle_etiqueta_user->getId());
                        $detalle_acta_etiqueta->save();

                    }
              }
              {
                /* Inicializa Variables con la sesion q se crea mediante el ingreso por correo */


                /* Crea variables de sesion del usuario Registrado */
                  //siempre y cuando el usuario no necesite verificacion
                  if($verificacion==2){
                        $this->getUser()->setAttribute('ses_user_id',$obj_usuario->getId());
                        $this->getUser()->setAttribute('ses_user_nombre',$obj_usuario->getNombre());
                        $this->getUser()->setAttribute('ses_user_ape_pat',$obj_usuario->getApePaterno());
                        $this->getUser()->setAttribute('ses_user_ape_mat',$obj_usuario->getApeMaterno());
                        $this->getUser()->setAttribute('ses_user_correo',$obj_usuario->getCorreo());
                  }

             }
             {


             }
             $respt =  json_encode(array(
		"code"	=>	10001,
                "rpt"	=>	$tiene_actas_acuerdo
             ));
             return $respt;
        }catch(Exception $e){
          $respt =  json_encode(array(
		"code"	=>	20001,
                "rpt"	=>	1
             ));
          return $respt;
        }
         $respt =  json_encode(array(
		"code"	=>	20001,
                "rpt"	=>	1
             ));
        return $respt;
}

}
